﻿using System;
using System.Windows.Forms;
using Company.BLL;
using Company.BLL.KDT.SXXK;
using Company.BLL.DuLieuChuan;
using Janus.Windows.GridEX;
using Company.BLL.KDT;

namespace Company.Interface.KDT.SXXK
{
    public partial class DinhMucSendForm : BaseForm
    {
        private DinhMucDangKy dmDangKy = new DinhMucDangKy();
        private string maSP = "";
        //-----------------------------------------------------------------------------------------
        public DinhMucSendForm()
        {
            InitializeComponent();
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Khởi tạo dữ liệu chuẩn.
        /// </summary>
        private void khoitao_DuLieuChuan()
        {
            this._DonViHaiQuan = DonViHaiQuan.SelectAll();
            this._DonViTinh = DonViTinh.SelectAll();
        }

        //-----------------------------------------------------------------------------------------
        private void DinhMucSendForm_Load(object sender, EventArgs e)
        {
            this.khoitao_DuLieuChuan();
            dgList.DataSource = this.dmDangKy.DMCollection;
        }
        private int CheckNPLVaSPDuyet()
        {
            foreach (DinhMuc dm in this.dmDangKy.DMCollection)
            {
                BLL.SXXK.NguyenPhuLieu npl = new Company.BLL.SXXK.NguyenPhuLieu();
                npl.Ma=dm.MaNguyenPhuLieu;
                npl.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                npl.MaHaiQuan = dmDangKy.MaHaiQuan;
                if (!npl.Load())
                    return 0;
                BLL.SXXK.SanPham sp = new Company.BLL.SXXK.SanPham();
                sp.Ma = dm.MaSanPham;
                sp.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                sp.MaHaiQuan = dmDangKy.MaHaiQuan;
                if (!sp.Load())
                    return 1;
            }
            return 2;
        }
        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Gửi thông tin đăng ký đến Hải quan.
        /// </summary>
        private void send()
        {            
            try
            {
              
                if (this.dmDangKy.DMCollection.Count > 0)
                {
                    // Master.
                    int s=CheckNPLVaSPDuyet();
                    if (s!=2)
                    {
                        string msg = "";
                        if (s == 1)
                            msg = "Trong danh sách này có nguyên phụ liệu chưa được hải quan duyệt.";
                        else msg = "Trong danh sách này có sản phẩm chưa được hải quan duyệt. ";
                        msg += "\n Bạn có muốn gửi lên hay không ?";
                        string kq = ShowMessage(msg, true);
                        if (kq != "Yes")
                            return;
                    }
                    this.Cursor = Cursors.WaitCursor;
                    this.dmDangKy.MaHaiQuan = ctrDonViHaiQuan.Ma;
                    this.dmDangKy.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
                    this.dmDangKy.MaDaiLy = GlobalSettings.MA_DAI_LY;
                    string returnMessage = string.Empty;
                    WSForm wsForm = new WSForm();
                    wsForm.ShowDialog(this);
                    if (!wsForm.IsReady) return;

                    this.dmDangKy.WSSend();
                    this.Cursor = Cursors.Default;
                    txtSoTiepNhan.Text = this.dmDangKy.SoTiepNhan.ToString();
                    lblTrangThai.Text = "Chờ duyệt chính thức";
                    cmdSend.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    cmdSave.Enabled = Janus.Windows.UI.InheritableBoolean.False;
                    cmdAdd.Enabled = Janus.Windows.UI.InheritableBoolean.False;                    
                    ShowMessage("Đăng ký thành công!\nSố tiếp nhận đăng ký điện tử: " + this.dmDangKy.SoTiepNhan.ToString(), false);
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                if (ex.Message.IndexOf("123DaDuyet321") >= 0)
                {
                    ShowMessage("Danh sách này đã duyệt rồi ", false);
                    return;
                }
                if (ShowMessage("Đăng ký không thành công.\nLỗi: " + ex.Message + ".\nBạn có muốn lưu thông tin và đưa vào hàng đợi không?", true) == "Yes")
                {
                    this.dmDangKy.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
                    this.dmDangKy.SoTiepNhan = 0;
                    this.dmDangKy.NgayTiepNhan = new DateTime(1900,1,1);
                    this.dmDangKy.NgayDangKy = new DateTime(1900, 1, 1);
                    this.dmDangKy.NgayApDung = new DateTime(1900, 1, 1);                    
                    int sttHang = 1;
                    foreach (DinhMuc nplD in this.dmDangKy.DMCollection)
                    {
                        nplD.STTHang = sttHang++;
                    }
                    this.dmDangKy.InsertUpdateFull();
                    HangDoi hd = new HangDoi();
                    hd.ID = this.dmDangKy.ID;
                    hd.LoaiToKhai = LoaiToKhai.DINH_MUC;
                    hd.TrangThai = this.dmDangKy.TrangThaiXuLy;
                    hd.ChucNang = ChucNang.KHAI_BAO;
                    MainForm.AddToQueueForm(hd);
                    MainForm.ShowQueueForm();
                }
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }
        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Thêm mới định mức.
        /// </summary>
        private void add()
        {
            DinhMucEditForm f = new DinhMucEditForm();
            f.OpenType = OpenFormType.Insert;
            f.maSP = this.maSP;
            f.MaDoanhNghiep = GlobalSettings.MA_DON_VI;
            f.MaHaiQuan = ctrDonViHaiQuan.Ma;
            f.DMCollection = dmDangKy.DMCollection;
            dmDangKy.MaHaiQuan = ctrDonViHaiQuan.Ma;
            f.dmDangKy = dmDangKy;
            f.ShowDialog();

            if (f.DMDetail!=null && f.DMDetail.DinhMucSuDung > 0)
            {
                this.maSP = f.DMDetail.MaSanPham;
                this.dmDangKy.DMCollection.Add(f.DMDetail);
                dgList.Refetch();
            }
        }

        //-----------------------------------------------------------------------------------------
        private void ctrDonViHaiQuan_ValueChanged(object sender, EventArgs e)
        {

        }

        //-----------------------------------------------------------------------------------------
        private void dgList_LoadingRow(object sender, RowLoadEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                //e.Row.Cells["DVT_ID"].Text = this.DonViTinh_GetName(e.Row.Cells["DVT_ID"].Value.ToString());
            }
        }
        private int getPostion(DinhMuc dm)
        {
            for (int i = 0; i < this.dmDangKy.DMCollection.Count; i++)
            {
                if (this.dmDangKy.DMCollection[i].MaSanPham == dm.MaSanPham && this.dmDangKy.DMCollection[i].MaNguyenPhuLieu == dm.MaNguyenPhuLieu) return i;
            }
            return -1;
        }
        //-----------------------------------------------------------------------------------------
        private void dgList_RowDoubleClick(object sender, RowActionEventArgs e)
        {
                if (e.Row.RowType == RowType.Record)
                {
                    DinhMucEditForm f = new DinhMucEditForm();
                    f.DMDetail = (DinhMuc)e.Row.DataRow;
                    f.MaHaiQuan = ctrDonViHaiQuan.Ma; ;
                    f.OpenType = OpenFormType.Edit;
                    int i = getPostion(f.DMDetail);
                    f.DMCollection = this.dmDangKy.DMCollection;
                    f.DMCollection.RemoveAt(i);
                    f.dmDangKy = dmDangKy;
                    f.ShowDialog();
                    if (f.DMDetail != null)
                    {
                        this.dmDangKy.DMCollection.Insert(i, f.DMDetail);
                    }
                }
                dgList.Refetch();

        }

        //-----------------------------------------------------------------------------------------
        /// <summary>
        /// Lưu thông tin.
        /// </summary>
        private void save()
        {
            try
            {
                
                if (this.dmDangKy.DMCollection.Count > 0)
                {
                    // Master.
                    this.Cursor = Cursors.WaitCursor;
                    this.dmDangKy.MaHaiQuan = ctrDonViHaiQuan.Ma;
                    if (this.dmDangKy.ID == 0)
                    {
                        this.dmDangKy.MaDaiLy = GlobalSettings.MA_DAI_LY;
                        this.dmDangKy.MaDoanhNghiep = GlobalSettings.MA_DON_VI;                        
                        this.dmDangKy.TrangThaiXuLy = TrangThaiXuLy.CHUA_KHAI_BAO;
                        this.dmDangKy.SoTiepNhan = 0;
                        this.dmDangKy.NgayTiepNhan = new DateTime(1900,1,1);
                        this.dmDangKy.NgayDangKy = new DateTime(1900, 1, 1);
                        this.dmDangKy.NgayApDung = new DateTime(1900, 1, 1); 
                    }                    
                    // Detail.
                    int sttHang = 1;
                    foreach (DinhMuc nplD in this.dmDangKy.DMCollection)
                    {
                        nplD.STTHang = sttHang++;
                    }

                    if (this.dmDangKy.InsertUpdateFull())
                    {
                        this.Cursor = Cursors.Default;
                        ShowMessage("Cập nhật thành công", false);
                    }
                    else
                    {
                        this.Cursor = Cursors.Default;
                        ShowMessage("Cập nhật không thành công", false);
                    }
                }
            }
            catch (Exception ex)
            {
                this.Cursor = Cursors.Default;
                MessageBox.Show("Có lỗi:" + ex.Source);
            }
            finally
            {
                this.Cursor = Cursors.Default;
            }        
        }

        //-----------------------------------------------------------------------------------------
        private void cmMain_CommandClick(object sender, Janus.Windows.UI.CommandBars.CommandEventArgs e)
        {
            switch (e.Command.Key)
            {
                case "cmdSave":
                    this.save();
                    break;
                case "cmdAdd":
                    this.add();
                    break;
                case "cmdSend":
                    this.send();
                    break;
            }
        }

        private void dgList_DeletingRecord(object sender, RowActionCancelEventArgs e)
        {
            if (e.Row.RowType == RowType.Record)
            {
                if (ShowMessage("Bạn có muốn xóa định mức này không?", true) == "Yes")
                {
                    DinhMuc dmSelected = new DinhMuc();
                    dmSelected.ID = Convert.ToInt32(e.Row.Cells["ID"].Value);

                    // Thực hiện xóa trong CSDL.
                    if (this.dmDangKy.ID > 0)
                    {
                        dmSelected.Delete();
                    }
                }
                else
                {
                    e.Cancel = true;
                }
            }
        }

        private void dgList_DeletingRecords(object sender, System.ComponentModel.CancelEventArgs e)
        {
            if (ShowMessage("Bạn có muốn xóa nguyên phụ liệu này không?", true) == "Yes")
            {
                GridEXSelectedItemCollection items = dgList.SelectedItems;
                foreach (GridEXSelectedItem i in items)
                {
                    if (i.RowType == RowType.Record)
                    {
                        DinhMuc dmSelected = (DinhMuc)i.GetRow().DataRow;
                        // Thực hiện xóa trong CSDL.
                        if (dmSelected.ID > 0)
                        {
                            dmSelected.Delete();
                        }
                    }
                }
            }
            else
            {
                e.Cancel = true;
            }
        }
    }
}